package wicket;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormChoiceComponentUpdatingBehavior;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.Radio;
import org.apache.wicket.markup.html.form.RadioGroup;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.PropertyListView;
import org.apache.wicket.model.CompoundPropertyModel;

import plantasVsZombies.AlmanaqueZombie;
import plantaszombies.Mejora;
import plantaszombies.Zombie;

public class AlmanaquePage extends WebPage {

	private static final long serialVersionUID = 1L;

	private AlmanaqueZombie almanaque = new AlmanaqueZombie();
	private WebPage paginaAnterior;

	private Label zombieSeleccionadoNombre;
	

	public AlmanaquePage(TableroPage tableroPage) {
		this.paginaAnterior = tableroPage;
		
		Form<AlmanaqueZombie> almanaqueForm = new Form<AlmanaqueZombie>("almanaqueForm", new CompoundPropertyModel(this.almanaque));

		this.agregarCamposSeleccionados(almanaqueForm);
		this.prepararAlmanaqueForm(almanaqueForm);
		
	}

	protected void prepararAlmanaqueForm(Form<AlmanaqueZombie> almanaqueForm) {
		this.generarCamposBusqueda(almanaqueForm);
		this.addButtons(almanaqueForm);
		this.generarGrillaResultados(almanaqueForm);
		this.add(almanaqueForm);
		this.almanaque.buscar();// Al abrir el formulario disparo la busqueda
	}

	protected void agregarCamposSeleccionados(Form<AlmanaqueZombie> almanaqueForm) {
		this.zombieSeleccionadoNombre = new Label("nombreZombieSeleccionado");
//		this.zombieSeleccionadoAtaque = new Label("ataqueZombieSeleccionado");
		this.zombieSeleccionadoNombre.setOutputMarkupId(true);
//		this.zombieSeleccionadoAtaque.setOutputMarkupId(true);
//		this.zombieSeleccionadoDefensa = new Label("defensaZombieSeleccionado");
//		this.zombieSeleccionadoDefensa.setOutputMarkupId(true);
//		almanaqueForm.add(zombieSeleccionadoDefensa);
		almanaqueForm.add(zombieSeleccionadoNombre);
// 		almanaqueForm.add(zombieSeleccionadoAtaque);
	}

	private void generarCamposBusqueda(Form<AlmanaqueZombie> almanaqueForm) {
		almanaqueForm.add(new TextField<String>("nombre"));
	}

	private void addButtons(Form<AlmanaqueZombie> almanaqueForm) {
		almanaqueForm.add(new Button("buscar") {
			@Override
			public void onSubmit() {
				AlmanaquePage.this.almanaque.buscar();
			}

		});

		almanaqueForm.add(new Button("limpiar") {
			@Override
			public void onSubmit() {
				AlmanaquePage.this.almanaque.clear();
			}
		});

		almanaqueForm.add(new Button("volver") {
			@Override
			public void onSubmit() {

				this.setResponsePage(AlmanaquePage.this.paginaAnterior);
			}
		});

	}

//echo en clase por ronny	
	private void generarGrillaResultados(final Form<AlmanaqueZombie> parent) {
		final RadioGroup<Zombie> radioGroup = new RadioGroup<Zombie>("zombieSeleccionado");
		// Resultados
		radioGroup.add(new PropertyListView<Zombie>("resultados") {
			@Override
			protected void populateItem(final ListItem<Zombie> item) {
				item.add(new Radio<Zombie>("radioZombie",item.getModel()));
				item.add(new Label("nombre"));
				item.add(new Label("resistencia"));
				item.add(new Label("ataque"));
			}
		});

		radioGroup.add(new AjaxFormChoiceComponentUpdatingBehavior() {
			@Override
			protected void onUpdate(AjaxRequestTarget target) {
				target.add(zombieSeleccionadoNombre);
			}
		});
		parent.add(radioGroup);
	}


	// Accesors
	public WebPage getPaginaAnterior() {
		return paginaAnterior;
	}

	public void setPaginaAnterior(WebPage paginaAnterior) {
		this.paginaAnterior = paginaAnterior;
	}

	public AlmanaqueZombie getAlmanaque() {
		return almanaque;
	}

	public void setAlmanaque(AlmanaqueZombie almanaque) {
		this.almanaque = almanaque;
	}
}


//	 private void generarGrillaResultados(Form<AlmanaqueZombie> parent) {
//         // Resultados
//         parent.add(new PropertyListView<Zombie>("resultados") {
//
//                 @Override
//                 protected void populateItem(final ListItem<Zombie> item) {
//                         item.add(new Label("nombre"));
//                         item.add(new Label("resistencia"));
//                         item.add(new Label("ataque"));
//                                 }
//
//         });
// }